package com.candy.servlet;

import java.io.File;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.demoweb.common.Util;
import com.demoweb.model.dao.BoardDao;
import com.demoweb.model.dao.CandyItemDao;

import com.demoweb.model.dto.Board;
import com.demoweb.model.dto.CandyItem;
import com.demoweb.model.dto.Membership;

import com.demoweb.ui.ThePager;

@WebServlet("/candy/candywrite.action")
public class ItemWriteServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {


		boolean isMultipart = ServletFileUpload.isMultipartContent(request);

		if (isMultipart) {// 파일 업로드 요청인 경우

			// 임시파일 저장 경로 생성
			// 가상경로 (http://.....) -> 물리 경로 (C:/....)
			String tempPath = request.getServletContext().getRealPath(
					"/WEB-INF/views/candy/temp");
			File tempDirectory = new File(tempPath);

			// 최종 파일 저장 경로 생성
			String uploadPath = request.getServletContext().getRealPath(
					"/itemimages");

			// FileUploader 객체의 생성기 -> 객체의 설정을 적용하는 곳
			DiskFileItemFactory factory = new DiskFileItemFactory();
			// temp 폴더에 저장 여부를 결정하는 크기 기준
			// 아래는 1M 이상되는 파일은 임시폴더에 저장했다가 이동하도록 설정
			factory.setSizeThreshold(1024 * 1024);
			factory.setRepository(tempDirectory);// 임시 파일 저장 경로 지정

			// 실제 파일 업로드를 수행하는 객체 -> 위의 팩토리 객체를 통해서 생성
			ServletFileUpload uploader = new ServletFileUpload(factory);
			uploader.setFileSizeMax(1024 * 1024 * 10);// 최대 파일 크기

			CandyItem upload = new CandyItem();// 자료 정보 저장

			try {
				// //parseRequest : 요청 정보를 처리해서 단위 별로 객체화한 배열을 반환
				List<FileItem> items = uploader.parseRequest(request);
				for (int i = 0; i < items.size(); i++) {
					FileItem item = items.get(i);
					if (item.isFormField()) {// 현재 요소가 일반 입력 요소인지?
						if (item.getFieldName().equals("itemname"))
							upload.setItemTitle(item.getString("utf-8"));
						else if (item.getFieldName().equals("content"))
							upload.setContent(item.getString("utf-8"));
					} else {// 파일 요소?
					// //uploadfile 객체에 데이터 저장
						if (item.getSize() > 0) {
							String fileName = item.getName();
							if (fileName.contains("\\")) {
								// C:\\A\\B\\C\\d.txt -> d.txt
								fileName = fileName.substring(fileName
										.lastIndexOf("\\") + 1);

							}
							String savedName = Util.getUniqueFileName(
									uploadPath, fileName);
							File uploadFile = new File(uploadPath, savedName);
							item.write(uploadFile);// 파일 저장
							item.delete();// 임시 파일 삭제
							
							upload.setItemFileName(savedName);

						}

					}

				}
//			
				//
				CandyItemDao dao = new CandyItemDao();
				dao.insertitem(upload);
				
			} catch (Exception ex) {
				ex.printStackTrace();
			}
		}

		response.sendRedirect("/demoweb/candy/list.action");

	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		//request.setCharacterEncoding("utf-8");
		doGet(request, response);
	}

}
